//        Echo Server 的基本思想
//
//
//        绑定端口: 将socket绑定到指定的IP地址和端口，以便客户端能够发送数据到该地址。
//
//        接收数据: 使用循环结构，不断 ** 来自客户端的数据包。当接收到数据时，提取出客户端的地址信息。
//        socket.
//
//        关闭Socket: 当服务器不再需要服务时，关闭socket以释放资源。

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class echoServer {
    // 创建Socket:用于接收和发送数据。
    private DatagramSocket socket=null;
    public echoServer(int port) throws SocketException {
        socket=new DatagramSocket(port);
    }
    public void start() throws IOException {
        System.out.println("服务器启动");
        while (true){
            DatagramPacket requesPackett=new DatagramPacket(new byte[2048],2048);
            socket.receive(requesPackett);
            //为了方便在Java代码中处理(尤其是后面进行打印)可以吧上述数据报中的二进制数据,拿出啦,构造成String
            String request=new String(requesPackett.getData(),0, requesPackett.getLength());

            //根据请求计算响应
            //回显数据: 将接收到的数据原封不动地发送回去，使用从客户端提取的地址信息进行发送。
            String response=this.process(request);
//            DatagramPacket(byte[] buf;
//                int offset;
//                int length;
//                int bufLength;
//                InetAddress address;
//                int port;
//                )五种参数
//            DatagramPacket 是 Java 网络编程中用于发送和接收数据报的类。它常用于无连接的 UDP 通信。以下是对构造函数每个参数的详细解释：
//
//            byte[] buf: 存储数据的字节数组。在发送数据时，这个数组包含了要发送的消息；在接收数据时，它将存储接收到的数据。
//
//            int offset: 指定从 buf 数组的哪个位置开始读取或写入数据。这个参数允许我们在字节数组中只使用一部分数据。
//
//            int length: 指定要发送或接收的字节数。这个参数确保我们只处理 buf 中的一部分数据，特别是在数组中可能存在其他未使用的数据时。
//
//            int bufLength: 这个参数通常在构造接收数据的 DatagramPacket 时使用，指定整个缓冲区的大小，确保不会超出数组边界。
//
//            InetAddress address: 指定目标主机的 IP 地址。在发送数据时，需要明确目标地址，而在接收数据时则会自动填充为发送方的地址。
//
//            int port: 指定目标主机的端口号。这是 UDP 通信中的重要参数，确保数据包被送到正确的应用程序。
            DatagramPacket responsePacket=new DatagramPacket(response.getBytes(),0,response.getBytes().length,
                    requesPackett.getSocketAddress());


        }

    }

    private String process(String request) {
        return request;
    }

    public static void main(String[] args) throws SocketException {
        echoServer server=new echoServer(2332);
    }
}
